package org.colswe.testingProject.entity;

import java.io.Serializable;
import javax.persistence.*;
import org.colswe.testingProject.control.SystemUserControl;

/**
 * Esta clase entidad es usada para almacenar la información correspondiente a
 * los usuarios del sistema.
 *
 * @author Leonardo Bohórquez
 */
@Entity
public class SystemUser implements Serializable {

    /**
     * Constante 50.
     */
    private static final int CINCO0 = 50;
    /**
     * Constante 30.
     */
    private static final int TRES0 = 30;
    /**
     * Constante false.
     */
    private static final boolean FALSE = false;
    /**
     * Constante true.
     */
    private static final boolean TRUE = true;
    /**
     * Id del usuario.
     */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    /**
     * Nombre de usuario.
     */
    @Column(length = CINCO0, unique = TRUE, nullable = FALSE)
    private String userName;
    /**
     * Contraseña del usuario.
     */
    @Column(length = 64, nullable = FALSE)
    private String password;
    /**
     * Rol del usuario.
     */
    @OneToOne
    @JoinColumn(nullable = FALSE)
    private SystemRoles userRole;

    /**
     * Constructor por defecto de la case SystemUser.
     */
    public SystemUser() {
    }

    /**
     * Constructor que recibe los parámetros necesarios para inicializar la
     * clase SystemUser.
     *
     * @param userName Nombre de usuario.
     * @param password Contraseña.
     */
    public SystemUser(String userName, String password) {
        this.userName = userName;
        this.password = SystemUserControl.sha256(password);
    }

    /**
     * Función que permite obtener el Id del usuario.
     *
     * @return Id del usuario.
     */
    public Long getId() {
        return id;
    }

    /**
     * Método que permite establecer el Id del usuario.
     *
     * @param id Id del usuario.
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * Función que permite obtener la contraseña del usuario.
     *
     * @return Contraseña del usuario.
     */
    public String getPassword() {
        return password;
    }

    /**
     * Método que permite establecer la contraseña del usuario.
     *
     * @param password Contraseña del usuario.
     */
    public void setPassword(String password) {
        this.password = SystemUserControl.sha256(password);
    }

    /**
     * Función que permite obtener el nombre de usuario del usuario.
     *
     * @return Nombre de usuario.
     */
    public String getUserName() {
        return userName;
    }

    /**
     * Método que permite establecer el nombre de usuario del usuario.
     *
     * @param userName Nombre de usuario.
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }

    /**
     * Función que permite obtener el rol del usuario en el sistema.
     *
     * @return Rol del susuario.
     */
    public SystemRoles getUserRole() {
        return userRole;
    }

    /**
     * Método que permite establecer el rol del usuario en el sistema.
     *
     * @param userRole Rol del usuario.
     */
    public void setUserRole(SystemRoles userRole) {
        this.userRole = userRole;
    }
}
